#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from std_msgs.msg import Header
# 假设 AGVEvent 的定义在 agv_msgs.msg 中，请根据实际消息所在包进行调整
from agv_msgs.msg import AGVEvent
import time

class AgvEventPublisher(Node):
    def __init__(self):
        super().__init__('agv_event_publisher')
        # 创建 publisher，消息类型为 AGVEvent，主题名为 'agv_event'
        self.publisher_ = self.create_publisher(AGVEvent, '/agvevent', 10)
        timer_period = 1.0  # 单位：秒
        self.timer = self.create_timer(timer_period, self.timer_callback)
        self.get_logger().info("AGVEvent Publisher 节点已启动")

    def timer_callback(self):
        msg = AGVEvent()

        # 填充 Header 字段
        header = Header()
        header.stamp = self.get_clock().now().to_msg()
        header.frame_id = 'base_link'
        msg.header = header

        # 根据业务需要填写各个字段的值，这里赋予示例数据
        msg.type = 1           # 消息分类显示的类型示例
        msg.action = 2         # 动作类型示例
        msg.ackreq = 0         # 手动复位标志示例
        msg.eventtime = time.time()   # 当前时间（Unix 时间戳，浮点数）
        msg.vellimit = 1.5     # 限速（例如 1.5 m/s）
        msg.ecode = 0          # 错误码/事件码，0代表正常
        msg.param1 = 100       # 参数1示例
        msg.param2 = 200       # 参数2示例
        msg.param3 = 300       # 参数3示例
        msg.param4 = 400       # 参数4示例
        msg.description_cn = "示例错误描述（中文）"
        msg.description = "Example error description (English)"

        # 发布消息
        self.publisher_.publish(msg)
        self.get_logger().info("发布 AGVEvent 消息: %s" % msg)

def main(args=None):
    rclpy.init(args=args)
    agv_event_publisher = AgvEventPublisher()

    try:
        rclpy.spin(agv_event_publisher)
    except KeyboardInterrupt:
        pass
    finally:
        # 清理工作
        agv_event_publisher.destroy_node()
        rclpy.shutdown()

if __name__ == '__main__':
    main()